const mysql = require('mysql');
module.exports = {
    /**数据库配置 */
    config: {
        host: 'localhost',
        user: 'root',
        password: '123456',
        port: '3306',
        database: 'learning_notebook'
    },
    /**连接数据库，使用mysql的连接池连接方式 */
    //连接池对象
    sqlConnect: function (sql, sqlArr, callBack) {
        let pool = mysql.createPool(this.config);
        pool.getConnection((err, conn) => {
            if (err) {
                console.log("数据库连接失败");
                return;
            }
            //时间驱动回调
            conn.query(sql, sqlArr, callBack);
            //释放连接
            conn.release();
        })
    },
    // 事务测试
    // let transactionArr = [{
    //     sql: 'select * from classify_one',
    //     sqlArr: []
    // }, {
    //     sql: 'select * from classify_two',
    //     sqlArr: []
    // }];
    // db.sqlConnectTransaction(transactionArr, (err) => {
    //     if (err) {
    //         utils.error(res, "删除失败");
    //         return;
    //     }
    //     utils.success(res, "删除成功")
    // });
    /**事务处理 */
    sqlConnectTransaction: function (transactionArr, callback) {
        let pool = mysql.createPool(this.config);
        pool.getConnection((err, conn) => {
            if (err) {
                console.log("数据库连接失败");
                return;
            }
            conn.beginTransaction((err) => {
                if (err) {
                    console.log("开始事务失败");
                    return;
                }
                const arr = transactionArr.map((item) => {
                    return new Promise((resolve, reject) => {//执行sql语句
                        conn.query(item.sql, item.sqlArr, (err, result) => {
                            if (err) {
                                reject(err)
                            } else {
                                resolve(result)
                            }
                        })
                    })
                })
                Promise.all(arr).then((result) => { // 全部成功
                    // 提交事务
                    conn.commit((err) => {
                        if (err) {
                            //回滚
                            conn.rollback(() => {
                                //释放连接
                                conn.release();
                                //返回值
                                return callback(err);
                            });
                        }
                        //释放连接
                        conn.release();
                        //返回值
                        return callback('');
                    });
                }).catch(err => {// 失败
                    //回滚
                    conn.rollback(() => {
                        //释放连接
                        conn.release();
                        return callback(err);
                    })
                })
            })
        })
    }



}
